package cn.edu.ncu.housinghub.dto.request.house;

import cn.edu.ncu.housinghub.entity.house.ComplementaryFacilities;
import cn.edu.ncu.housinghub.entity.house.PropertyVerification;
import cn.edu.ncu.housinghub.entity.user.Agent;
import cn.edu.ncu.housinghub.entity.user.Landlord;
import jakarta.persistence.PrePersist;
import jakarta.persistence.PreUpdate;
import jakarta.validation.constraints.*;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
public class HouseRequest {

    @NotNull
    private Long userId;
    @NotBlank(message = "房源标题不能为空")
    private String houseTitle; // 房源标题

    @NotNull(message = "房源验证ID不能为空")
    private Long propertyVerifyId; // 房产认证ID

    @NotBlank(message = "房源简介不能为空")
    private String houseSummary; // 房源简介



    private ComplementaryFacilities complementaryFacilities; // 配套设施


    @NotBlank(message = "房源位置不能为空")
    private String houseLocation; // 房源位置

    @NotNull(message = "户型不能为空")
    @Min(value = 1, message = "户型必须为正整数")
    @Max(value = 5, message = "户型必须为有效值")
    private Integer layout; // 户型（1=一居室，2=两居室，3=三居室，4=四居室，5=五居室）

    @NotNull(message = "楼层不能为空")
    // 使用校验约束楼层格式 所在楼层（int）/总楼层（int）
    @Pattern(regexp = "^\\d+/\\d+$", message = "楼层格式错误")
    private String floor; // 所在楼层

    @NotBlank(message = "朝向不能为空")
    private String orientation; // 朝向

    @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式错误")
    private String phone;


    @NotNull(message = "租金不能为空")
    @Positive(message = "租金必须大于0")
    private BigDecimal rent; // 租金（元/月）

    @NotNull(message = "支付方式不能为空")
    @Min(value = 1, message = "支付方式必须为有效值")
    @Max(value = 3, message = "支付方式必须为有效值")
    private Integer paymentType; // 支付方式（1=月付，2=季付，3=年付）



    @NotNull(message = "出租类型不能为空")
    // 出租类型（1=房东直售，2=中介代理）
    @Min(value = 1, message = "出租类型必须为有效值")
    @Max(value = 2, message = "出租类型必须为有效值")
    private Integer rentType;


    @NotNull(message = "经纬度不能为空")
    @DecimalMin(value = "-180.0", message = "经度必须在-180到180之间")
    @DecimalMax(value = "180.0", message = "经度必须在-180到180之间")
    private BigDecimal longitude;//经度
    @NotNull(message = "经纬度不能为空")
    @DecimalMin(value = "-90.0", message = "纬度必须在-90到90之间")
    @DecimalMax(value = "90.0", message = "纬度必须在-90到90之间")
    private BigDecimal latitude;//纬度
    private String subwayInfo; // 地铁信息

    // 押金类型
    @NotNull(message = "押金类型不能为空")
    // 押金类型：市面上常见的押金类型（1=押1付1，2=押1付3，3=年押金）
    @Min(value = 1, message = "押金类型必须为有效值")
    @Max(value = 3, message = "押金类型必须为有效值")
    private Integer depositType;


}
